import { getToken ,setToken,removeToken} from "@/utils/auth"
import { login } from "@/api/user"
import { getUserInfo } from "@/api/user"
import { constantRoutes,resetRouter } from "@/router"
// 存储数据
const state = {
  token:getToken(), // 初始数据,冲缓存中获取
  userInfo:{},
  routes:constantRoutes
} 
//同步修改数据
const mutations = {
  // 设置token
  setToken(state,token){
    // 将token同步到缓存
    state.token = token
    setToken(token)

  },
  // 删除token
  removeToken(state){
    //删除vuex中的token
    state.token = null
    removeToken()
  },
  setUserInfo(state,userInfo){
    state.userInfo = userInfo
    

  },
  setRoutes(state,newRoutes){
    state.routes =[...constantRoutes,...newRoutes]  //静态路由+动态路由
  }

} 


//异步修改数据
const actions = { 
  // context: 上下文
  // data: 传递的参数
  async login(context,data){
    // todo:调用登录接口
    const token = await login(data)
    // 登录成功后会返回一个token 
    context.commit('setToken',token)
  },
  async getUserInfo(context) {
    const result = await getUserInfo()
    context.commit('setUserInfo',result)
    return result // 返回用户信息
  },
  async logout(context){
    context.commit('removeToken') //删除token
    context.commit('setUserInfo',{}) // 删除用户信息
    resetRouter() //重置路由

  }
} 

export default{
  namespaced: true,  //开启命名空间 
  state,
  mutations,
  actions
}
